int is_magic_square(int *pa, size_t n)
{
	int i;

	int suml = 0;
	int sumr = 0;

    // 计算正反对角线元素的和
	for(i = 0; i < n; i++)
	{
		suml += *(pa + i * n + i);
		sumr += *(pa + i * n + n - 1 -i);
	}

	// 不相等直接返回(剪枝操作，加快速度)
	if(suml != sumr)
	{
		return 0;
	}

	// 判断各行元素的和是否与传入的数字相等
	// 不相等直接返回(剪枝操作，加快速度)
	if(!is_row_equal(pa, n, suml))
	{
		return 0;
	}

	// 转置方阵
	transpose(pa, n);

	// 判断各行元素的和是否与传入的数字相等
	// 不相等直接返回(剪枝操作，加快速度)
	if(!is_row_equal(pa, n, suml))
	{
		return 0;
	}

	return 1;
}
